package xin.marcher.module.inventory.mq.producer;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import xin.marcher.module.common.constants.RocketMqConstant;
import xin.marcher.module.inventory.domain.request.BucketClearRequest;

/**
 * 清空分桶库存的消息队列
 *
 * 
 */
@Slf4j
@Component
public class BucketClearProducer {

    @Autowired
    private DefaultProducer defaultProducer;

    /**
     * 清空分桶库存的消息 MQ生产
     *
     * @param bucketClearRequest
     */
    public void sendBucketClear(BucketClearRequest bucketClearRequest) {
        //发送清空分桶库存消息,延迟1秒，留给更多的时间给正在扣减该分桶的线程处理(分布式本地缓存的消息覆盖通知有一定延迟性，为避免库存数据的错误必须保证分桶已下线才能准确扣减库存)
        // 实际清空库存的任务，也做了对应重试，获取当前下线分桶库存和回退如果不一致的下线分桶请求会重新发延迟消息等待下次消费重试。
        defaultProducer.sendMessage(RocketMqConstant.BUCKET_CLEAR_TOPIC,
                JSONObject.toJSONString(bucketClearRequest), 1, "清空分桶");
    }
}
